草庐IT

c++ - C++ 中 void 指针的缺点

全部标签

c++ - C/C++ 指针,ptr+1 = ptr +1 byte 还是 ptr+1*sizeof(pointer_type)?

有any_type*ptr=(any_type*)malloc(sizeof(any_type)*size);my_ptr=ptr+1;memcpy(dst,my_ptr,sizeof(any_type));my_ptr会指向ptr之后的1个字节,还是指向ptr之后的sizeof(any_type)字节?对齐选项如何影响答案?有符号/无符号类型是否不同? 最佳答案 指针运算是在指针的静态类型[*]的大小上进行的,所以它会有效地添加sizeof*ptr。成员的对齐方式将作为类型的对齐方式(对象末尾的填充)考虑到对象的大小。struct

c++ - 当我们分配一个指针为 NULL 时会发生什么?

我有一个指向一些数据的指针。现在我已经创建了一个类似的指针。现在这个新指针被分配给旧指针。如果我删除旧的会发生什么?A*a=newA();A*b=a;a=NULL;“a”和“b”会发生什么?此外,如果我做以下事情:A*a=newA();A*b=a;deletea;而且我还想知道当我们赋值为NULL时指针会发生什么。A*a=newA();a=NULL;a仍然指向一些内存还是什么都不指向? 最佳答案 A*a=newA();A*b=a;a=NULL;在此之后,b仍然指向第一行分配的对象。a现在什么都不指向了。您仍然可以通过b指针“使用”该

c++ - 将指针设置为 NULL 会影响您指向的原始项目吗?

我有一个指向链表中节点的指针:structnode*temp=head.next如果我将此指针设置为NULL,例如:temp=NULL;这也会影响我指向的节点吗?即head.next现在是NULL? 最佳答案 这也会影响我指向的节点吗?即head.next现在为NULL?没有。这样想。head.next是一个保存值(地址)的变量。当你这样做时structnode*temp=head.next现在temp也与head.next具有相同的值。稍后当您更改temp的值时,为什么head.next所持有的值要更改。这是当您复制变量的值(在这

c++ - 如何获取指针数组中的元素数?

如何获取指针数组中的元素个数?下面是我的代码:structmystruct{inta;charch[10];intc;};mystruct*m_arr[2];我在其他一些文件中遍历这个数组。我不想在每个文件中硬编码为2,而是希望以编程方式获取数组中的元素数。 最佳答案 不要使用原始数组。使用标准容器,如std::vector或std::array。这两个都有一个.size()成员,并允许基于范围的for语法:for(mystruct*p:m_arr)如果您需要C兼容性,它们都提供了一个data()成员函数,该函数返回指向底层数组中第

c++ - 如何在 C++ 中转换指针

voidfoo(void**Pointer);intmain(){int*IntPtr;foo(&((void*)IntPtr));}为什么会出现错误?error:lvaluerequiredasunary‘&’operand谢谢 最佳答案 voidfoo(void**Pointer);intmain(){int*IntPtr;foo((void**)&IntPtr);} 关于c++-如何在C++中转换指针,我们在StackOverflow上找到一个类似的问题:

c++ - 指针的作用域?

好的,所以我确实找到了一些几乎相似的问题,但实际上它们让我对指针更加困惑。C++PointerObjectsvs.NonPointerObjects在上面的链接中,他们说如果你声明一个指针,它实际上是保存在堆上而不是栈上,不管它是在哪里声明的。这是真的??还是我理解错了???我认为无论是指针还是非指针,如果它是一个全局变量,它与应用程序一样存在。如果它是局部变量或在循环或函数中声明,则它的生命周期仅与其中的代码一样长。 最佳答案 变量本身存储在栈或DATA段,但是用new分配后它指向的内存在堆内。

c++ - 如何使用 "auto"获取顶级 const 指针?

简而言之:根据C++Primer,第69页,“自动”:“如果我们希望推导类型具有顶级const,我们必须明确说明”。我会得到一个顶级常量指针:inti=42;constauto*p=&i;但结果p的类型为constint*而不是预期的int*const。我什至可以重新分配它p=0;。为什么?(注:使用auto*的指针类型推导格式来自书本。) 最佳答案 在您的示例中,p是指向constint的指针,而不是指向int的const指针>。后者可以通过以下语句实现:auto*constp=&i;

c++ - '+' 无法添加两个指针错误

我可以执行以下代码所示的操作:std::stringa="chicken";std::stringb="nuggets";std::stringc=a+b;然而,这失败了:std::stringc="chicken"+"nuggets";它给我一个错误提示“‘+’不能添加两个指针”。为什么?有没有其他方法可以在不出错的情况下执行此操作? 最佳答案 "chicken"和"nuggets"是文字C字符串而不是std::string。您可以直接连接:std::stringc="chicken""nuggets";从C++14开始,您可以添

c++ - 弄清楚晦涩的指针typedef

typedefsolution_type(*algorithm_ptr_type)(problem_typeproblem,void(*post_evaluation_callback)(void*move,intscore)/*=NULL*/);请帮帮我!谢谢 最佳答案 这意味着,algorithm_ptr_type是一个指向返回solution_type的函数的指针,其参数为:问题problem_typepost_evaluation_callback这又是一个函数指针,它接受两个参数(void*和int),并返回void.同样

C++:在常量指针指向的对象中调用非常量函数(错误 C2662)

我有一个带有指向对象的const指针的结构。它是const以便pointer不会改变,我不希望对象保持不变。我想在该对象中调用一个非常量函数,因此收到以下错误:errorC2662:'my_namespace::MyClass::myFunc':cannotconvert'this'pointerfrom'constmy_namespace::MyClass'to'my_namespace::MyClass&'ConversionlosesqualifiersstructMyStruct{MyStruct(constMyClass*init_my_class_ptr);constMyC